package com.wjn.basic.thread.threadpool.zdypool;


import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 拒绝执行策略
 */
public class RejectedExecutionHandlerImpl implements RejectedExecutionHandler {

    //啥都不做，任务丢弃
//    @Override
//    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
//        MyRunnable my = (MyRunnable)r;
//        System.out.println("拒绝执行...:"+my.getMyname());
//    }

    //再执行一次
//    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
//        if (!e.isShutdown()) { //如果线程池没有关闭，则将当前任务尝试执行一次
//            MyRunnable my = (MyRunnable)r;
//            System.out.println("再执行一次...:"+my.getMyname());
//            r.run();
//        }
//    }
    //弹出并移除队头中的一个任务并执行当前的任务
//    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
//        if (!e.isShutdown()) {
//            e.getQueue().poll(); //弹出并移除队头中的一个任务并执行当前的任务
//            e.execute(r);
//        }
//    }
    //无法执行的抛出异常
    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
        throw new RejectedExecutionException("Task " + r.toString() +
                " rejected from " +
                e.toString());
    }

}
